<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>实验一：数据表示与运算实验</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
        }
        
        body {
            background: #f5f7fa;
            min-height: 100vh;
            display: flex;
            flex-direction: column;
            color: #333;
        }
        
        .navbar {
            display: flex;
            justify-content: space-between;
            align-items: center;
            background: linear-gradient(135deg, #007BFF, #0056b3);
            color: white;
            padding: 15px 30px;
            position: relative;
            z-index: 100;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        }
        
        .logo-container {
            display: flex;
            align-items: center;
            gap: 15px;
        }
        
        .logo-container img {
            height: 45px;
            filter: drop-shadow(0 2px 4px rgba(0,0,0,0.2));
        }
        
        .logo-container h1 {
            font-size: 1.8rem;
            font-weight: 600;
            color: white;
        }
        
        .user-info-container {
            display: flex;
            align-items: center;
            gap: 20px;
        }
        
        .user-avatar {
            width: 50px;
            height: 50px;
            border-radius: 50%;
            background: #3498db;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 1.5rem;
            font-weight: bold;
            color: white;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
            cursor: pointer;
            transition: all 0.3s ease;
        }
        
        .user-avatar:hover {
            transform: scale(1.05);
            background: #2980b9;
        }
        
        .logout-btn {
            background: rgba(255, 255, 255, 0.15);
            color: white;
            border: 1px solid rgba(255, 255, 255, 0.3);
            padding: 8px 18px;
            border-radius: 20px;
            cursor: pointer;
            font-weight: 500;
            transition: all 0.3s ease;
            display: flex;
            align-items: center;
            gap: 8px;
        }
        
        .logout-btn:hover {
            background: rgba(255, 255, 255, 0.25);
            transform: translateY(-2px);
        }
        
        .container {
            display: flex;
            flex: 1;
            padding: 20px;
            max-width: 1600px;
            margin: 0 auto;
            width: 100%;
            gap: 20px;
        }
        
        .sidebar {
            width: 260px;
            background: white;
            border-radius: 15px;
            padding: 20px 15px;
            box-shadow: 0 3px 10px rgba(0, 0, 0, 0.08);
            height: fit-content;
        }
        
        .sidebar-header {
            padding: 15px 10px;
            border-bottom: 1px solid #eaeaea;
            margin-bottom: 20px;
            display: flex;
            align-items: center;
            gap: 12px;
        }
        
        .sidebar-header i {
            font-size: 1.4rem;
            color: #007BFF;
        }
        
        .sidebar-header h2 {
            color: #2c3e50;
            font-size: 1.4rem;
        }
        
        .sidebar ul {
            list-style: none;
            padding: 0;
        }
        
        .sidebar ul li {
            margin: 10px 0;
        }
        
        .sidebar ul li a {
            text-decoration: none;
            color: #555;
            display: flex;
            align-items: center;
            gap: 15px;
            padding: 14px 20px;
            border-radius: 10px;
            transition: all 0.3s ease;
            font-size: 1.1rem;
            font-weight: 500;
        }
        
        .sidebar ul li a:hover {
            background: #f0f7ff;
            color: #007BFF;
        }
        
        .sidebar ul li a.active {
            background: #e1f0ff;
            color: #007BFF;
            font-weight: 600;
        }
        
        .sidebar ul li a i {
            font-size: 1.2rem;
            width: 25px;
            text-align: center;
        }
        
        .main-content {
            flex: 1;
            background: white;
            border-radius: 15px;
            padding: 30px;
            box-shadow: 0 3px 10px rgba(0, 0, 0, 0.08);
            display: flex;
            flex-direction: column;
        }
        
        .experiment-header {
            display: flex;
            justify-content: space-between;
            align-items: flex-start;
            margin-bottom: 30px;
            padding-bottom: 20px;
            border-bottom: 1px solid #eaeaea;
        }
        
        .experiment-header h1 {
            color: #2c3e50;
            font-size: 2.2rem;
            display: flex;
            align-items: center;
            gap: 15px;
        }
        
        .experiment-header h1 i {
            color: #007BFF;
            background: #e1f0ff;
            width: 60px;
            height: 60px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 1.8rem;
        }
        
        .experiment-info {
            display: flex;
            flex-wrap: wrap;
            gap: 20px;
            margin-bottom: 20px;
        }
        
        .info-card {
            background: #f0f7ff;
            padding: 15px 20px;
            border-radius: 10px;
            min-width: 200px;
        }
        
        .info-card h3 {
            color: #007BFF;
            font-size: 1.1rem;
            margin-bottom: 8px;
            display: flex;
            align-items: center;
            gap: 8px;
        }
        
        .info-card p {
            font-size: 1.1rem;
            color: #2c3e50;
            font-weight: 500;
        }
        
        .content-section {
            margin: 25px 0;
            padding: 20px;
            background: #f9fcff;
            border-radius: 12px;
            border-left: 4px solid #007BFF;
        }
        
        .content-section h2 {
            color: #2c3e50;
            font-size: 1.8rem;
            margin-bottom: 20px;
            display: flex;
            align-items: center;
            gap: 12px;
        }
        
        .content-section h2 i {
            color: #007BFF;
        }
        
        .content-section h3 {
            color: #2c3e50;
            font-size: 1.4rem;
            margin: 20px 0 15px;
            padding-bottom: 8px;
            border-bottom: 1px solid #eaeaea;
        }
        
        ol, ul {
            padding-left: 30px;
            margin: 15px 0;
        }
        
        ol li, ul li {
            margin: 12px 0;
            line-height: 1.6;
        }
        
        p {
            margin: 15px 0;
            line-height: 1.7;
            color: #444;
        }
        
        .mark {
            background: #fff8e6;
            padding: 15px;
            border-radius: 8px;
            border-left: 4px solid #f39c12;
            margin: 20px 0;
            font-weight: 500;
            color: #d35400;
        }
        
        code {
            background: #e1f0ff;
            padding: 2px 8px;
            border-radius: 4px;
            color: #007BFF;
            font-family: 'Courier New', monospace;
        }
        
        .experiment-table {
            width: 100%;
            border-collapse: separate;
            border-spacing: 0;
            border-radius: 10px;
            overflow: hidden;
            box-shadow: 0 3px 8px rgba(0, 0, 0, 0.05);
            background: white;
            border: 1px solid #eaeaea;
            margin: 20px 0;
        }
        
        .experiment-table th {
            background: linear-gradient(135deg, #007BFF, #0056b3);
            color: white;
            padding: 16px 15px;
            text-align: left;
            font-weight: 500;
        }
        
        .experiment-table th:first-child {
            border-top-left-radius: 10px;
        }
        
        .experiment-table th:last-child {
            border-top-right-radius: 10px;
        }
        
        .experiment-table td {
            padding: 14px 15px;
            border-bottom: 1px solid #f0f7ff;
            color: #555;
        }
        
        .experiment-table tr:last-child td {
            border-bottom: none;
        }
        
        .experiment-table tr:nth-child(even) {
            background-color: #f9fcff;
        }
        
        .experiment-table tr:hover {
            background-color: #f0f7ff;
        }
        
        .action-buttons {
            display: flex;
            justify-content: flex-end;
            gap: 15px;
            margin-top: 30px;
            padding-top: 20px;
            border-top: 1px solid #eaeaea;
        }
        
        .btn {
            padding: 12px 25px;
            border-radius: 25px;
            cursor: pointer;
            font-weight: 500;
            display: flex;
            align-items: center;
            gap: 8px;
            transition: all 0.3s ease;
            border: none;
            font-size: 1rem;
        }
        
        .btn-primary {
            background: #007BFF;
            color: white;
        }
        
        .btn-primary:hover {
            background: #0056b3;
            transform: translateY(-2px);
            box-shadow: 0 4px 10px rgba(0, 123, 255, 0.3);
        }
        
        .btn-outline {
            background: transparent;
            border: 1px solid #007BFF;
            color: #007BFF;
        }
        
        .btn-outline:hover {
            background: #e1f0ff;
            transform: translateY(-2px);
        }
        
        /* 响应式设计 */
        @media (max-width: 1200px) {
            .container {
                flex-direction: column;
            }
            
            .sidebar {
                width: 100%;
                margin-bottom: 20px;
            }
        }
        
        @media (max-width: 768px) {
            .navbar {
                padding: 12px 15px;
            }
            
            .logo-container h1 {
                font-size: 1.5rem;
            }
            
            .experiment-header {
                flex-direction: column;
                gap: 20px;
            }
            
            .experiment-info {
                flex-direction: column;
                gap: 12px;
            }
            
            .action-buttons {
                flex-direction: column;
            }
            
            .experiment-table {
                display: block;
                overflow-x: auto;
            }
        }
        
        /* 动画效果 */
        @keyframes fadeIn {
            from { opacity: 0; transform: translateY(20px); }
            to { opacity: 1; transform: translateY(0); }
        }
        
        .content-section {
            animation: fadeIn 0.5s ease-out;
        }
        
        .experiment-table {
            animation: fadeIn 0.6s ease-out;
        }
        
        .action-buttons {
            animation: fadeIn 0.7s ease-out;
        }
        
        .floating-btn {
            position: fixed;
            bottom: 30px;
            right: 30px;
            background: #007BFF;
            color: white;
            width: 60px;
            height: 60px;
            border-radius: 50%;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 1.5rem;
            box-shadow: 0 4px 15px rgba(0, 123, 255, 0.4);
            cursor: pointer;
            transition: all 0.3s ease;
            z-index: 99;
        }
        
        .floating-btn:hover {
            transform: scale(1.1);
            background: #0056b3;
            box-shadow: 0 6px 20px rgba(0, 123, 255, 0.5);
        }
    </style>
</head>
<body>
    <!-- 顶部导航栏 -->
    <div class="navbar">
        <div class="logo-container">
            <img src="./img/logo.png" alt="LOGO">
            <h1>学生实验管理系统</h1>
        </div>
        
        <div class="user-info-container">
            <div class="user-avatar" id="userInitials">张</div>
            <button class="logout-btn" onclick="logout()">
                <i class="fas fa-sign-out-alt"></i> 退出
            </button>
        </div>
    </div>

    <!-- 页面容器 -->
    <div class="container">
        <!-- 侧边栏 -->
        <div class="sidebar">
            <div class="sidebar-header">
                <i class="fas fa-user-graduate"></i>
                <h2>学生控制台</h2>
            </div>
            <ul>
                <li><a href="../student.html"><i class="fas fa-tachometer-alt"></i>仪表盘</a></li>
                <li><a href="#" class="active"><i class="fas fa-flask"></i>实验查看</a></li>
                <li><a href="#"><i class="fas fa-file-upload"></i>作业提交</a></li>
                <li><a href="#"><i class="fas fa-chart-line"></i>成绩查询</a></li>
                <li><a href="#"><i class="fas fa-bullhorn"></i>通知公告</a></li>
                <li><a href="#"><i class="fas fa-question-circle"></i>帮助与反馈</a></li>
            </ul>
        </div>

        <!-- 主内容区 -->
        <div class="main-content">
            <div class="experiment-header">
                <h1>
                    <i class="fas fa-microscope"></i>
                    实验一：数据表示与运算实验
                </h1>
                <div class="experiment-info">
                    <div class="info-card">
                        <h3><i class="fas fa-calendar-alt"></i> 截止日期</h3>
                        <p>2023年10月15日</p>
                    </div>
                    <div class="info-card">
                        <h3><i class="fas fa-clock"></i> 剩余时间</h3>
                        <p>7天</p>
                    </div>
                    <div class="info-card">
                        <h3><i class="fas fa-check-circle"></i> 提交状态</h3>
                        <p>已提交</p>
                    </div>
                    <div class="info-card">
                        <h3><i class="fas fa-star"></i> 成绩</h3>
                        <p>85分</p>
                    </div>
                </div>
            </div>

            <!-- 实验目的 -->
            <div class="content-section">
                <h2><i class="fas fa-bullseye"></i> 实验目的</h2>
                <ol>
                    <li>更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。</li>
                    <li>加深对数据二进制编码表示的了解。</li>
                    <li>使用有限类型和数量的运算操作实现一组给定功能的函数。</li>
                </ol>
            </div>

            <!-- 实验环境 -->
            <div class="content-section">
                <h2><i class="fas fa-laptop-code"></i> 实验仪器设备/实验环境</h2>
                <ul>
                    <li>Linux操作系统---64位 Ubuntu 18.04</li>
                    <li>C编译环境(gcc)</li>
                    <li>计算机</li>
                </ul>
            </div>

            <!-- 实验内容 -->
            <div class="content-section">
                <h2><i class="fas fa-tasks"></i> 实验内容</h2>
                <p>本实验每位学生拿到一个<code>datalab-handout.tar</code>文件。学生可以通过U盘、网盘、虚拟机共享文件等方式将其导入到Unbuntu实验环境中，选择合适位置存放。然后在Ubuntu环境下解压。解压后，根据文件中的叙述和要求更改<code>bits.c</code>文件，其他文件不要动。本次实验的主要操作方式为：使用C语言的位操作符实现题目要求。</p>
                
                <div class="mark">
                    <i class="fas fa-exclamation-triangle"></i> [完成实验后提交给老师时，将自己编写的<code>bits.c</code>改名为"bits_学号"的形式交给学委统一收集。文件名例：<code>bits_18210320101.c</code>。如果文件名出现错误，则自动评分程序不会给出分数，请务必注意！！！！]
                </div>

                <h3><i class="fas fa-code"></i> 1. 位操作</h3>
                <p>表1列出了<code>bits.c</code>中一组操作和测试位组的函数。</p>
                <table class="experiment-table">
                    <thead>
                        <tr>
                            <th>本题分数</th>
                            <th>函数名</th>
                            <th>功能</th>
                            <th>约束条件</th>
                            <th>最多操作符数量</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>1</td>
                            <td>isZero</td>
                            <td>判断变量x是否为0。如果为0，则返回1；否则，返回0。</td>
                            <td>仅可以使用以下操作符：! ~ & ^ | + << >></td>
                            <td>2</td>
                        </tr>
                        <tr>
                            <td>1</td>
                            <td>specialBits</td>
                            <td>构建0xffca3fff，并返回。</td>
                            <td>仅可以使用以下操作符：! ~ & ^ | + << >></td>
                            <td>3</td>
                        </tr>
                        <tr>
                            <td>2</td>
                            <td>upperBits</td>
                            <td>将输入参数x的高5位全部置1，其余位置0，然后返回。</td>
                            <td>仅可以使用以下操作符：! ~ & ^ | + << >></td>
                            <td>5</td>
                        </tr>
                        <tr>
                            <td>2</td>
                            <td>bitMatch</td>
                            <td>构建一个掩码，标识出x和y中相同的位的位置。</td>
                            <td>仅可以使用以下操作符：! ~ & ^ | + << >></td>
                            <td>14</td>
                        </tr>
                    </tbody>
                </table>

                <h3><i class="fas fa-calculator"></i> 2. 补码运算</h3>
                <p>表2列出了<code>bits.c</code>中一组使用整数的补码表示的函数。</p>
                <table class="experiment-table">
                    <thead>
                        <tr>
                            <th>本题分数</th>
                            <th>函数名</th>
                            <th>功能</th>
                            <th>约束条件</th>
                            <th>最多操作符数量</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>2</td>
                            <td>negate</td>
                            <td>将输入参数x的值取相反数，返回-x。</td>
                            <td>仅可以使用以下操作符：! ~ & ^ | + << >></td>
                            <td>5</td>
                        </tr>
                        <tr>
                            <td>3</td>
                            <td>isPositive</td>
                            <td>如果x>0，则返回1；否则，返回0。</td>
                            <td>仅可以使用以下操作符：! ~ & ^ | + << >></td>
                            <td>8</td>
                        </tr>
                        <tr>
                            <td>3</td>
                            <td>logicalShift</td>
                            <td>将x逻辑右移n位（0<=n<=31）。</td>
                            <td>仅可以使用以下操作符：! ~ & ^ | + << >></td>
                            <td>16</td>
                        </tr>
                    </tbody>
                </table>

                <h3><i class="fas fa-water"></i> 3. 浮点数操作</h3>
                <p>表3列出了<code>bits.c</code>中一组浮点数二进制表示的操作函数。</p>
                <table class="experiment-table">
                    <thead>
                        <tr>
                            <th>本题分数</th>
                            <th>函数名</th>
                            <th>功能</th>
                            <th>约束条件</th>
                            <th>最多操作符数量</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>2</td>
                            <td>floatAbsVal</td>
                            <td>通过bit级操作返回一个float型浮点数的绝对值。</td>
                            <td>可以使用任何的操作符，包括||和&&。也可以使用if，while。</td>
                            <td>10</td>
                        </tr>
                        <tr>
                            <td>4</td>
                            <td>floatScale2</td>
                            <td>返回表达式2*f的浮点数的二进制表示。</td>
                            <td>可以使用任何的操作符，包括||和&&。也可以使用if，while。</td>
                            <td>30</td>
                        </tr>
                    </tbody>
                </table>
            </div>

            <!-- 实验步骤 -->
            <div class="content-section">
                <h2><i class="fas fa-footsteps"></i> 实验步骤</h2>
                <ol>
                    <li>使用<code>dlc</code>检查函数实现代码是否符合实验要求的编码规则。</li>
                    <li>使用<code>btest</code>检查函数实现代码的功能正确性。</li>
                    <li>完成所有函数实现后，运行<code>./driver.pl</code>进行整体测试。</li>
                    <li>将完成的<code>bits.c</code>文件重命名为要求的格式并提交。</li>
                </ol>
            </div>

            <!-- 注意事项 -->
            <div class="content-section">
                <h2><i class="fas fa-exclamation-circle"></i> 实验注意事项</h2>
                <ol>
                    <li>注意给出的可以使用的运算符及最大个数。</li>
                    <li>除了float类型的两个操作函数可以使用if-else条件语句外，其它函数只能用顺序结构进行代码设计和实现。</li>
                    <li>本实验使用<code>btest</code>程序进行评分时记分为50分制，但最后教师端进行实际成绩核算时会使用100分制（乘以2）。</li>
                    <li>提交前务必检查文件名格式是否正确。</li>
                    <li>实验报告需包含关键函数的实现思路和解释。</li>
                </ol>
            </div>

            <!-- 操作按钮 -->
            <div class="action-buttons">
                <button class="btn btn-outline">
                    <i class="fas fa-download"></i> 下载实验资料
                </button>
                <button class="btn btn-primary">
                    <i class="fas fa-file-upload"></i> 提交实验报告
                </button>
            </div>
        </div>
    </div>
    
    <!-- 悬浮按钮 -->
    <div class="floating-btn" onclick="scrollToTop()">
        <i class="fas fa-arrow-up"></i>
    </div>
    
    <script>
        // 退出登录功能
        function logout() {
            // 清除用户会话
            sessionStorage.removeItem('loggedInUser');
            // 跳转到登录页面
            alert('您已退出登录');
            window.location.href = '/login.html';
        }
        
        // 页面加载时设置用户信息
        document.addEventListener('DOMContentLoaded', function() {
            const loggedInUser = sessionStorage.getItem('loggedInUser');
            
            if (loggedInUser) {
                const userData = JSON.parse(loggedInUser);
                const userName = userData.name;
                const userInitials = userName.charAt(0).toUpperCase();
                
                // 更新页面上的用户信息
                document.getElementById('userInitials').textContent = userInitials;
            }
            
            // 为侧边栏添加交互效果
            const navLinks = document.querySelectorAll('.sidebar ul li a');
            navLinks.forEach(link => {
                link.addEventListener('click', function(e) {
                    navLinks.forEach(l => l.classList.remove('active'));
                    this.classList.add('active');
                });
            });
        });
        
        // 滚动到顶部
        function scrollToTop() {
            window.scrollTo({
                top: 0,
                behavior: 'smooth'
            });
        }
        
        // 显示/隐藏悬浮按钮
        window.onscroll = function() {
            const floatingBtn = document.querySelector('.floating-btn');
            if (document.body.scrollTop > 500 || document.documentElement.scrollTop > 500) {
                floatingBtn.style.display = "flex";
            } else {
                floatingBtn.style.display = "none";
            }
        };
    </script>
</body>
</html>